home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD Concept 6
/
CD Concept 06.iso
/
mac
/
UTILITAIRE
/
Oztex
/
PS-files
/
OzTeXdict.pro
< prev
next >
Wrap
Text File
|
1995-01-31
|
9KB
|
274 lines
% DVI-to-PS prolog used by OzTeX 1.8 with standard Mac print drivers.
% Uncomment the following line to prevent a timeout error when
% creating missing PK fonts.
% statusdict begin /waittimeout 0 def end
/OzTeXdict 200 dict def % enough room for about 150 fonts
OzTeXdict begin
/@setup % set up OzTeX
{ /res exch def % resolution (defines dots per inch)
/ht exch def % paper height (in dots)
/wd exch def % paper width (in dots)
/land wd ht gt def % landscape orientation?
} def
/newPKfont % create new PK font
{ /maxchcode exch def
/fontid exch def
fontid 7 dict def
fontid load begin
/FontType 3 def
/FontMatrix [1 0 0 -1 0 0] def
/FontBBox [0 0 1 1] def
/BitMaps maxchcode 1 add array def
/BuildChar {CharBuilder} def
/Encoding 256 array def
0 1 255 {Encoding exch /.notdef put} for
end
fontid fontid load definefont setfont
} def
% The char data, a bitmap descriptor, is an array with 6 elements;
% element 0 is either a hex string or an array of hex strings (the latter
% is required for large PK chars with more than 65535 hex digits).
/ch-image {ch-data 0 get dup type /stringtype ne {N get /N N 1 add def} if
} def % hex string
/ch-width {ch-data 1 get} def % the number of pixels across
/ch-height {ch-data 2 get} def % the number of pixels tall
/ch-xoff {ch-data 3 get} def % number of pixels to left of origin
/ch-yoff {ch-data 4 get} def % number of pixels below origin
/ch-advw {ch-data 5 get} def % advance width
% The following character builder looks up the char data in the BitMaps array
% and paints the character.
/CharBuilder % image one char
{ /ch-code exch def % save the char code
/font-dict exch def % and the font dict
/ch-data font-dict /BitMaps get
ch-code get def
/N 0 def
ch-advw 0
ch-xoff neg ch-height ch-yoff sub 1 sub neg % -xo , -(ht-yo-1)
ch-width ch-xoff sub 1 sub ch-yoff % (wd-xo-1) , yo
setcachedevice
ch-width ch-height true
[1 0 0 -1 ch-xoff ch-yoff] % bitmap sent top to bottom
{ch-image}
imagemask
} def
/sf {setfont} def % set current font
/dc % define new character
{ /ch-code exch def
/ch-data exch def
currentfont /BitMaps get ch-code ch-data put
currentfont /Encoding get ch-code
dup ( ) cvs cvn put % generate unique name
} bind def
/@bop0 % begin page n
{ pop % throw away page number
% Determine printing scale.
0 0 transform /y0 exch def /x0 exch def
res res transform
/ydiff exch y0 sub abs def
/xdiff exch x0 sub abs def
/yscale ydiff res div def % used below and in @bsp
/xscale xdiff res div def % ditto
% For aligning rules, make sure ALL values in CTM are integers.
% But only do so if printing at or near 100% scale, otherwise
% an "undefinedresult" error might occur.
xscale 1.0 sub abs .001 lt yscale 1.0 sub abs .001 lt and
{ matrix currentmatrix
dup dup 0 get round cvi 0 exch put
dup dup 1 get round cvi 1 exch put
dup dup 2 get round cvi 2 exch put
dup dup 3 get round cvi 3 exch put
dup dup 4 get round cvi 4 exch put
dup dup 5 get round cvi 5 exch put
setmatrix
} if
% r is used to typeset a rule. Some adjustment may be needed for
% different printer models; test results on page 18 in nasty.dvi.
land % landscape?
{ /r % set a wd by ht rule at h,v
{ newpath
1 add moveto % move to h,v+1
/ht exch 1 sub def % reduce height by 1
/wd exch 1 sub def % ditto for width
wd 0 rlineto
0 ht neg rlineto
wd neg 0 rlineto
fill
} bind def
}
{ /r % set a wd by ht rule at h,v
{ newpath
moveto % move to h,v
/ht exch 1 sub def % reduce height by 1
/wd exch 1 sub def % ditto for width
wd 0 rlineto
0 ht neg rlineto
wd neg 0 rlineto
fill
} bind def
} ifelse
} def
/mtrx 6 array def
/@bop1 % begin typesetting page n
{ pop % throw away page number
mtrx currentmatrix pop % for rotating TeX material
} def
/@eop % end page n
{ pop % throw away page number
% Use following line to help set max length of OzTeXdict.
% OzTeXdict length 10 string cvs print (\r) print flush
} def
% h and s are used to typeset downloaded bitmap fonts.
/h {exch 0 rmoveto show} bind def % move right by dh and show (...)
/s {3 1 roll moveto show} bind def % move to h,v and show (...)
% H and S are used to typeset PostScript fonts.
% We can't use relative horizontal positioning because the advance widths in
% a PostScript font are not integers and rounding errors would accumulate.
/H {exch v moveto show} bind def % move to h,v and show (...)
/S % ditto, and save v position
{ 3 1 roll
1 add % v+1 to match baseline of bitmap fonts
dup /v exch def
moveto show
} bind def
% Following 2 procedures are invoked as the result of \special{file}.
% Unlike @bepsf, we have no BoundingBox info, so we must use initgraphics
% and make a risky assumption about which way to rotate if landscape.
/@bsp
{ /vmag exch def % vertical scaling
/hmag exch def % horizontal scaling
moveto % move to h,v
/prespecialVM save def % save showpage, TeX procedures etc.
userdict begin % push userdict on dict stack
/showpage {} def % user does not have to remove showpage
currentpoint transform
initgraphics itransform translate % move 0,0 to h,v
hmag vmag scale
xscale yscale scale % calculated in @bop0
land { -90 rotate } if % rotate axes if landscape
} bind def
/@esp
{ end % pop userdict
prespecialVM restore % restore saved showpage value etc
} bind def
% Following 2 procedures are invoked as the result of \special{epsf=file}.
/@bepsf
{ /lly exch def % LLy for BoundingBox
/llx exch def % LLx for BoundingBox
/vmag exch def % vertical scaling
/hmag exch def % horizontal scaling
/vpos exch def % v pos of \special box
/hpos exch def % h pos of \special box
/prespecialVM save def % save showpage, TeX procedures etc
userdict begin % push userdict on dict stack
/showpage {} def % user does not have to remove showpage
hpos vpos translate % move 0,0 to h,v
hmag vmag scale % scale BoundingBox
llx neg lly neg translate % move LLx,LLy to h,v
} bind def
/@eepsf
{ end % pop userdict
prespecialVM restore % restore saved showpage value etc
} bind def
% Here is the code to handle bitmaps generated by PICT/PNTG \specials.
/@bitmap
{ /vmag exch def % vertical scaling
/hmag exch def % horizontal scaling
/vres exch def % vertical resolution of bitmap
/hres exch def % horizontal resolution of bitmap
/ht exch def % height
/wd exch def % width
/hexstring ht string def
gsave
1 add translate % set origin to h,v+1
res hres div wd mul hmag mul
res vres div ht mul vmag mul neg scale
wd ht true
[ wd 0 0 ht neg 0 ht ]
{ currentfile hexstring readhexstring pop }
imagemask
grestore
} def
% Here are the definitions needed to handle PostScript fonts.
/namestr 60 string def % for names
/numstr 12 string def % for numbers
/newPSfont % create new PS font
{ /fontname exch def % printer font name
/mag exch def % DVI mag
/scaledpts exch def % font size in scaled pts
% Use scaledpts and mag to calculate font size in device dots.
scaledpts 16#10000 div % scaled pts to pts
res mul 72.27 div % pts to device dots
mag 1000 div mul % scale by mag/1000
/dotsize exch def
/done false def
% If fontname starts with "Slanted-" then construct slanted font.
fontname namestr cvs (Slanted-) anchorsearch
{ pop cvn findfont [1 0 .167 -1 0 0] makefont dotsize scalefont
/done true def
}{ pop } ifelse
% Other nice tricks can be included here if you build the required
% fonts and add appropriate printer font names to your config file.
% fontname namestr cvs (Extended-) anchorsearch
% { pop cvn findfont [1.2 0 0 -1 0 0] makefont dotsize scalefont
% /done true def
% }{ pop } ifelse
done not
{ fontname findfont [1 0 0 -1 0 0] makefont dotsize scalefont
} if
% Modified font dictionary is on stack, so remember it for later setfont
% via a unique name that is the concatenation of fontname and scaledpts.
fontname length scaledpts numstr cvs length add
/newname exch string def
newname 0 fontname namestr cvs putinterval
newname fontname length scaledpts numstr cvs putinterval
newname cvn exch def
} bind def
% Do NOT include matching "end" for "OzTeXdict begin" in this file.
% OzTeX will add "end" after downloading font info.